package mybox.engine.fresnel;

import java.util.ArrayList;

import mybox.engine.Figur;
import mybox.engine.File4Qcad;
import mybox.engine.Line;
import mybox.engine.QVector;

public class ReflektorProfile implements Figur{
	
	public File4Qcad file4qcad ;	
	
	public double brennweite=1000;
	public double verdeckung=2;
	public double spiegelDicke=4;
	public double spiegelBreite=50;
	public double sicherheitsAuflage;
	public double initialAbsenkung;
	public double abschattungsBreite;
	public double zusatzInitOffset;
	public int    anzahlZinken;
	
	Line abschattungsLine=null;
	Line solarFlaeche=null;
	Line absenkungsLinie=null;
	
	ZinkenTp2 firstZinken = null; 
	ZinkenTp2 secondZinken = null;
	
	ArrayList<ZinkenTp2> zinkenList = new ArrayList<ZinkenTp2>();
	
	Line brennErhoehung=null;
	
	public ReflektorProfile(			
			File4Qcad file4qcad,
			double brennweite,
			double verdeckung,
			double spiegelDicke,
			double spiegelBreite,
			double sicherheitsAuflage,
			double abschattungsBreite,
			double zusatzInitOffset,
			double initialAbsenkung,			
			int    anzahlZinken) {
		
		this.file4qcad=file4qcad;
		this.brennweite=brennweite;
		this.verdeckung=verdeckung;
		this.spiegelDicke=spiegelDicke;
		this.spiegelBreite=spiegelBreite;
		this.sicherheitsAuflage=sicherheitsAuflage;
		this.abschattungsBreite=abschattungsBreite;
		this.zusatzInitOffset=zusatzInitOffset;
		this.initialAbsenkung=initialAbsenkung;
		this.anzahlZinken=anzahlZinken;
	}
	
	public void init() {
		
		brennErhoehung= new Line(file4qcad, new QVector(0,0), new QVector(0,brennweite));
		
		solarFlaeche = new Line(file4qcad, new QVector(-abschattungsBreite/2, brennweite), new QVector(abschattungsBreite/2, brennweite));
		abschattungsLine = new Line(file4qcad, 
				               new QVector(0,0),
								new QVector(abschattungsBreite/2+zusatzInitOffset,0)
							);
		absenkungsLinie= new Line(file4qcad, new QVector(abschattungsBreite/2,0), new QVector(abschattungsBreite/2,-initialAbsenkung));
		
		firstZinken = new ZinkenTp2(file4qcad,spiegelDicke, verdeckung, abschattungsBreite, brennweite, new QVector(abschattungsBreite/2+this.zusatzInitOffset,0));
		
		for (int zinkIdx=0; zinkIdx<anzahlZinken;zinkIdx++) {
			if (zinkIdx==0) zinkenList.add(new ZinkenTp2(file4qcad,spiegelDicke, verdeckung, abschattungsBreite, brennweite, new QVector(abschattungsBreite/2+this.zusatzInitOffset,0)));
			else 			{
				ZinkenTp2 lastZinken = zinkenList.get(zinkenList.size()-1);
				zinkenList.add(new ZinkenTp2(file4qcad,spiegelDicke, verdeckung, abschattungsBreite, brennweite, lastZinken.absatz.end));
			}			
		}
		
	}
	
	@Override
	public void draw() {
		
		brennErhoehung.draw();
		solarFlaeche.draw();
		
		abschattungsLine.draw();
		absenkungsLinie.draw();
		mdraw(abschattungsLine);
		mdraw(absenkungsLinie);
		
		for (ZinkenTp2 zinken : zinkenList) {
			zinken.draw();			
		}
		
	}
	
	public void mdraw(Line line) {
		Line.xMirror(file4qcad, 0, line).draw();	
	}
	
	

}
